چگونه یک تحلیلگر داده ساده با پایتون و پاندز بسازیم
تحلیل داده ممکن است در برخورد اول پیچیده به نظر برسد. شاید پایگاههای داده بزرگ، ریاضیات پیشرفته و الگوریتمهای پیچیده یادگیری ماشین را تصور کنید. اما بسیاری از کارهای مفید تحلیل داده t
تحلیل داده ممکن است در برخورد اول پیچیده به نظر برسد. شاید پایگاههای داده بزرگ، ریاضیات پیشرفته و الگوریتمهای پیچیده یادگیری ماشین را تصور کنید.
اما بسیاری از کارهای مفید در زمینه تحلیل داده با چیزی بسیار سادهتر شروع میشوند: بارگذاری یک مجموعه داده، پرسیدن سوالاتی درباره آن و استفاده از پایتون برای یافتن پاسخها.
در این آموزش، شما یک تحلیلگر داده ساده با استفاده از پایتون و پاندز (pandas) خواهید ساخت. شما با یک مجموعه داده فرضی از عملکرد دانشجویان کار خواهید کرد و یاد میگیرید که چگونه دادهها را بارگذاری کنید، آنها را بررسی کنید، آمارهها را محاسبه کنید، رکوردها را فیلتر کنید، اطلاعات را گروهبندی کنید و یک نمودار پایهای بسازید.
در پایان، شما یک پایه و اساس قابل استفاده مجدد برای تحلیل انواع مختلفی از مجموعههای داده CSV خواهید داشت.
پیشنیازها
پیش از دنبال کردن این آموزش، باید چند مهارت و ابزار پایه پایتون را آماده داشته باشید. شما به برنامهنویسی پیشرفته یا تجربه تحلیل داده نیاز ندارید، اما باید با موارد زیر آشنا باشید:
- متغیرهای پایتون و انواع دادههای پایه، مانند رشتهها و اعداد.
- وارد کردن کتابخانهها (Importing libraries) و فراخوانی توابع.
- کار با لیستها و عملیات پایه روی دادهها.
اگر در پایتون تازه کار هستید، بهتر است پیش از ادامه، این مبانی را یاد بگیرید. اگر میخواهید عمیقتر شوید، این یک دوره تعاملی پایتون برای شروع است.
همچنین، مطمئن شوید که موارد زیر را نصب کردهاید:
- پایتون: پایتون 3 یا یک نسخه سازگار با آن.
- پاندز (pandas): کتابخانه پایتونی که برای بارگذاری، فیلتر کردن، گروهبندی و تحلیل دادهها از آن استفاده خواهیم کرد.
- متپلاتلیب (Matplotlib): کتابخانهای که برای ساخت مصورسازیها و نمودارها از آن استفاده میکنیم.
- یک ویرایشگر کد یا محیط توسعه (IDE): مانند VS Code، PyCharm یا یک ویرایشگر متن ساده، به همراه دسترسی به ترمینال.
شما میتوانید با اجرای دستور زیر در ترمینال خود، کتابخانههای pandas و Matplotlib را نصب کنید:
pip install pandas matplotlib
همچنین به پوشهای نیاز دارید که بتوانید اسکریپت پایتون خود و مجموعه داده students.csv را که در این آموزش میسازیم، در آن ذخیره کنید.
پس از آماده شدن همه چیز، میتوانید تحلیل دادهها را با پایتون آغاز کنید!
مواردی که پوشش خواهیم داد:
- راهاندازی محیط کار
- ایجاد مجموعه داده
- بارگذاری مجموعه داده با Pandas
- کاوش دادهها
- محاسبه آمارههای پایه
- فیلتر کردن دادهها
- یافتن دانشجویان خاص
- گروهبندی دادهها
- تحلیل زمان مطالعه
- ساخت یک مصورسازی (نمودار)
- ساخت تحلیلگر کامل
- قابلیت استفاده مجدد بیشتر از تحلیلگر
- مدیریت دادههای گمشده
- خروجی گرفتن از نتایج
- اشتباهات رایجی که باید از آنها اجتناب کنید
- از اینجا به کجا برویم
- سخن پایانی
راهاندازی محیط کار
نصب pandas
اگر کتابخانه pandas را از قبل نصب نکردهاید، ترمینال خود را باز کرده و این دستور را اجرا کنید:
pip install pandas matplotlib
ما از pandas برای تحلیل دادهها و از Matplotlib برای یک مصورسازی ساده استفاده خواهیم کرد.
میتوانید نصب را با این دستور بررسی کنید:
import pandas as pd
import matplotlib.pyplot as plt
print(pd.__version__)
اگر پایتون شماره نسخه را چاپ کرد، همهچیز آماده است.
ایجاد مجموعه داده
ایجاد یک فایل CSV
کار را با ساخت فایلی به نام students.csv و افزودن مقداری داده آغاز میکنیم.
مجموعه دادهای که در اینجا با آن کار خواهیم کرد، ساختگی است و شامل ۱۲ رکورد از دانشآموزان پایههای ۹ تا ۱۲ میشود. هر سطر نشاندهنده یک دانشآموز و هر ستون توصیفکننده یک ویژگی متفاوت است:
- name: نام کوچک دانشآموز.
- grade: پایه تحصیلی فعلی دانشآموز در مدرسه.
- study_hours: تعداد ساعات مطالعه دانشآموز.
- attendance: درصد حضور و غیاب دانشآموز.
- score: نمره آزمون دانشآموز، ثبتشده در مقیاس ۰ تا ۱۰۰.
برای مثال، Ava در پایه ۹ است، ۴.۵ ساعت مطالعه داشته، دارای ۹۵٪ حضور است و نمره آزمون ۸۲ را دریافت کرده است. این رکوردهای نمونه به ما اجازه میدهند پرسشهایی را بررسی کنیم؛ مانند اینکه آیا زمان مطالعه با نمرات آزمون ارتباطی دارد و میانگین نمرات در پایههای مختلف تحصیلی چگونه با هم مقایسه میشوند.
از آنجا که دادهها ساختگی و کوچک هستند، هر الگویی که مشاهده کنیم صرفاً جنبه نمایشی دارد و نباید آن را به عنوان مدرکی درباره عموم دانشآموزان در نظر بگیریم.
اما دادههای ما اطلاعات کافی برای انجام چندین تحلیل مفید را در اختیارمان میگذارند. این هم از دادهها:
name,grade,study_hours,attendance,score
Ava,9,4.5,95,82
Liam,9,6.0,98,91
Sophia,10,3.5,89,76
Noah,10,7.0,99,94
Emma,11,5.5,93,88
Oliver,11,8.0,97,96
Mia,12,4.0,91,79
Ethan,12,6.5,96,90
Isabella,9,7.5,100,97
Lucas,10,2.5,85,68
Amelia,11,6.0,94,92
James,12,5.0,90,84
بارگذاری مجموعه داده با پانداس (Pandas)
خواندن فایل CSV
برنامه پایتون خود را با ایمپورت کردن pandas آغاز کنید:
import pandas as pd
سپس فایل CSV را بارگذاری کنید:
data = pd.read_csv("students.csv")
تابع read_csv() فایل CSV را میخواند و آن را به یک DataFrame در پانداس تبدیل میکند.
یک DataFrame ساختار دادهای جدولمانند با سطرها و ستونها است. میتوانید آن را مانند یک صفحه گسترده (Spreadsheet) قابل برنامهنویسی در نظر بگیرید.
بیایید مجموعه داده را نمایش دهیم:
print(data)
باید رکوردهای دانشآموزان را که در ترمینال شما چاپ شدهاند، ببینید.
کاوش در دادهها
پیش از تحلیل یک مجموعه داده، مفید است که بدانید با چه چیزی سر و کار دارید.
مشاهده سطرهاي اول
متد head() پنج سطر اول را نمایش میدهد:
print(data.head())
همچنین میتوانید مشخص کنید چه تعداد سطر میخواهید:
print(data.head(3))
بررسی اندازه مجموعه داده
برای یافتن تعداد سطرها و ستونها از shape استفاده کنید:
print(data.shape)
نتیجه به این شکل خواهد بود:
(12, 5)
این یعنی مجموعه داده ما شامل ۱۲ سطر و ۵ ستون است.
بررسی نام ستونها
میتوانید نام ستونها را با این دستور مشاهده کنید:
print(data.columns)
این کار زمانی مفید است که بعداً در برنام خود نیاز به ارجاع به ستونها داشته باشید.
بررسی انواع دادهها
برای مشاهده اطلاعات مربوط به هر ستون از info() استفاده کنید:
data.info()
این کار به شما کمک میکند تشخیص دهید آیا ستونها حاوی اعداد صحیح، اعداد اعشاری، متن یا سایر انواع دادهها هستند.
محاسبه آمارهای پایه
کتابخانه پانداس (Pandas) محاسبه آمارها را بدون نیاز به نوشتن دستی فرمولهای ریاضی آسان میکند.
محاسبه میانگین نمرات
ما میتوانیم میانگین نمرات را با استفاده از روش زیر محاسبه کنیم:
average_score = data["score"].mean()
print(f"Average score: {average_score:.2f}")
متد mean() میانگین حسابی را محاسبه میکند.
قالببندی :.2f به پایتون میگوید که نتیجه را با دو رقم اعشار نمایش دهد.
یافتن بالاترین و پایینترین نمرات
از max() و min() استفاده کنید:
highest_score = data["score"].max()
lowest_score = data["score"].min()
print(f"Highest score: {highest_score}")
print(f"Lowest score: {lowest_score}")
همچنین میتوانید میانه را پیدا کنید:
median_score = data["score"].median()
print(f"Median score: {median_score}")
میانه همان مقدار وسطی است وقتی که نمرهها مرتب شده باشند.
ایجاد یک خلاصه آماری
پانداس همچنین یک متد کاربردی به نام describe() ارائه میدهد:
print(data["score"].describe())
این متد آمارهایی مانند موارد زیر را تولید میکند:
- تعداد
- میانگین
- انحراف معیار
- حداقل
- صدک بیست و پنجم
- میانه
- صدک هفتاد و پنجم
- حداکثر
میتوانید یک خلاصه برای تمام ستونهای عددی تولید کنید:
print(data.describe())
این اغلب یکی از اولین دستوراتی است که هنگام کاوش در یک مجموعه داده ناآشنا استفاده خواهید کرد.
فیلتر کردن دادهها
یکی از مفیدترین ویژگیهای پانداس، قابلیت انتخاب سطرها بر اساس شرطها است.
یافتن دانشآموزان با نمرات بالا
فرض کنید میخواهیم دانشآموزانی را پیدا کنیم که حداقل نمره ۹۰ را کسب کردهاند:
high_scores = data[data["score"] >= 90]
print(high_scores)
عبارت:
data["score"] >= 90
یک شرط بولین (Boolean) برای هر سطر ایجاد میکند. سپس پانداس فقط سطرهایی را نگه میدارد که در آنها آن شرط True (درست) است.
یافتن دانشآموزانی که بیش از پنج ساعت مطالعه میکنند
ما میتوانیم همین عملیات را با استفاده از زمان مطالعه انجام دهیم:
frequent_studiers = data[data["study_hours"] > 5]
print(frequent_studiers)
همچنین میتوانید چندین شرط را با هم ترکیب کنید.
برای مثال، فرض کنید دانشآموزانی را میخواهیم که بیش از پنج ساعت مطالعه میکنند و نرخ حضور بیش از ۹۵ درصد دارند:
students = data[
(data["study_hours"] > 5) &
(data["attendance"] > 95)
]
print(students)
هنگام ترکیب شرطها در پانداس، از & برای AND و از | برای OR استفاده کنید. هر شرط باید در پرانتز قرار گیرد.
یافتن دانشآموزان خاص
استفاده از idxmax()
Sometimes you don't just want the highest value. You want to know which record contains it.
برای مثال:
top_student_index = data["score"].idxmax()
top_student = data.loc[top_student_index]
print(top_student)
متد idxmax() ایندکس سطری را برمیگرداند که حاوی بزرگترین مقدار است.
ما میتوانیم همین کار را برای ساعتهای مطالعه نیز انجام دهیم:
most_studious_index = data["study_hours"].idxmax()
most_studious_student = data.loc[most_studious_index]
print(most_studious_student)
این به شما اجازه میدهد که یک آمار را دوباره به رکورد اصلی متصل کنید.
گروهبندی دادهها
گروهبندی زمانی بسیار مفید میشود که مجموعه داده شما حاوی دستهبندیهای مختلفی باشد.
در مجموعه داده ما، دانشآموزان به پایههای تحصیلی مختلفی تعلق دارند.
میانگین نمره بر اساس پایه تحصیلی
ما میتوانیم میانگین نمره را برای هر پایه تحصیلی محاسبه کنیم:
average_by_grade = data.groupby("grade")["score"].mean()
print(average_by_grade)
این کار به ما نشان میدهد که میانگین نمره بین پایههای مختلف چه تفاوتی دارد.
ما میتوانیم خروجی را خواناتر کنیم:
average_by_grade = (
data.groupby("grade")["score"]
.mean()
.round(2)
)
print(average_by_grade)
آمارههای چندگانه
شما میتوانید چندین آمار را بهطور همزمان محاسبه کنید:
grade_summary = data.groupby("grade")["score"].agg(
["mean", "min", "max", "count"]
)
print(grade_summary)
این کار یک خلاصه برای هر پایه شامل میانگین، حداقل، حداکثر و تعداد دانشآموزان تولید میکند.
تحلیل زمان مطالعه
ما همچنین میتوانیم رابطه بین ساعات مطالعه و نمرات را بررسی کنیم.
محاسبه همبستگی
کتابخانه پاندز یک متد به نام corr() ارائه میدهد:
correlation = data["study_hours"].corr(data["score"])
print(f"Correlation: {correlation:.2f}")
مقدار همبستگی بهطور کلی بین 1- تا 1 متغیر است.
مقداری که به 1 نزدیکتر باشد نشاندهنده یک رابطه خطی مثبت قویتر است، در حالی که مقداری که به 1- نزدیکتر باشد نشاندهنده یک رابطه خطی منفی قویتر است. مقداری نزدیک به 0 نشاندهنده رابطه خطی ضعیفی است.
با این حال، همبستگی ثابت نمیکند که یک متغیر باعث ایجاد متغیر دیگر میشود. برای مثال، اگر ساعات مطالعه و نمرات در این مجموعه داده همبسته باشند، این موضوع ثابت نمیکند که مطالعه بیشتر مستقیماً باعث کسب نمرات بالاتری شده است.
ایجاد یک تجسمسازی
اعداد مفید هستند، اما تجسمسازیها میتوانند تشخیص الگوها را آسانتر کنند.
ایجاد یک نمودار پراکندگی
ما یک نمودار پراکندگی ایجاد میکنیم که ساعات مطالعه و نمرات آزمون را نشان میدهد:
import matplotlib.pyplot as plt
plt.scatter(data["study_hours"], data["score"])
plt.xlabel("Study Hours")
plt.ylabel("Test Score")
plt.title("Study Hours vs. Test Scores")
plt.show()
هر نقطه نشاندهنده یک دانشآموز است.
محور x نشاندهنده ساعات مطالعه و محور y نشاندهنده نمرات آزمون است.
ممکن است متوجه شوید که آیا با افزایش زمان مطالعه، نقاط بهطور کلی به سمت بالا حرکت میکنند یا خیر.
این همان چیزی است که باید شبیه آن باشد:
ایجاد یک نمودار میلهای
ما همچنین میتوانیم میانگین نمره برای هر پایه را به تصویر بکشیم:
average_by_grade = data.groupby("grade")["score"].mean()
average_by_grade.plot(kind="bar")
plt.xlabel("Grade")
plt.ylabel("Average Score")
plt.title("Average Score by Grade")
plt.show()
یک نمودار میلهای مقایسه میانگینها بین گروهها را آسانتر میکند.
این همان چیزی است که نمودار میلهای باید شبیه آن باشد:
ساخت تحلیلگر کامل
اکنون بیایید ایدههای اصلی را در یک برنامه ترکیب کنیم.
import pandas as pd
import matplotlib.pyplot as plt
# Load the dataset
data = pd.read_csv("students.csv")
# Basic information
print("Dataset shape:")
print(data.shape)
print("\nFirst five rows:")
print(data.head())
# Score statistics
average_score = data["score"].mean()
median_score = data["score"].median()
highest_score = data["score"].max()
lowest_score = data["score"].min()
print("\nScore Statistics")
print(f"Average: {average_score:.2f}")
print(f"Median: {median_score:.2f}")
print(f"Highest: {highest_score}")
print(f"Lowest: {lowest_score}")
# Students with scores of 90 or higher
high_scores = data[data["score"] >= 90]
print("\nStudents with scores of 90 or higher:")
print(high_scores[["name", "score"]])
# Average score by grade
average_by_grade = (
data.groupby("grade")["score"]
.mean()
.round(2)
)
print("\nAverage Score by Grade:")
print(average_by_grade)
# Study hours and score correlation
correlation = data["study_hours"].corr(data["score"])
print(f"\nStudy Hours vs. Score Correlation: {correlation:.2f}")
# Scatter plot
plt.scatter(data["study_hours"], data["score"])
plt.xlabel("Study Hours")
plt.ylabel("Test Score")
plt.title("Study Hours vs. Test Scores")
plt.show()
این برنامه اکنون یک روند کاری تحلیل دادههای کوچک اما کامل را انجام میدهد.
قابل استفاده مجددتر کردن تحلیلگر
یک گام مفید بعدی، تبدیل عملیات تکراری به توابع است.
ایجاد یک تابع تحلیل
بهجای نوشتن همهچیز بهطور مستقیم در برنامه اصلی، میتوانیم یک تابع ایجاد کنیم:
def analyze_scores(data):
average = data["score"].mean()
median = data["score"].median()
highest = data["score"].max()
lowest = data["score"].min()
print(f"Average score: {average:.2f}")
print(f"Median score: {median:.2f}")
print(f"Highest score: {highest}")
print(f"Lowest score: {lowest}")
سپس آن را با این دستور فراخوانی کنید:
analyze_scores(data)
این کار استفاده مجدد از کد را با یک دیتافریم دیگر آسانتر میکند.
ایجاد یک تابع برای دانشآموزان برتر
ما همچنین میتوانیم تابعی ایجاد کنیم که دانشآموزان با بالاترین نمرات را برگرداند:
def get_top_students(data, minimum_score=90):
return data[data["score"] >= minimum_score][
["name", "grade", "score"]
]
اکنون میتوانیم هر زمان که بخواهیم آستانه (threshold) را تغییر دهیم:
print(get_top_students(data, 95))
توابعی مانند این زمانی که تحلیلگر شما بزرگتر میشود، بسیار باارزش میشوند.
مدیریت دادههای گمشده (Missing Data)
دادههای دنیای واقعی بهندرت به تمیزی مثال ما هستند. گاهی اوقات ممکن است با مقادیر گمشده مواجه شوید.
شما میتوانید مقادیر گمشده را با استفاده از دستور زیر بررسی کنید:
print(data.isnull().sum())
این به شما میگوید که چه تعداد مقدار گمشده در هر ستون وجود دارد.
برای مثال، میتوانید سطرهای حاوی مقادیر گمشده را با دستور زیر حذف کنید:
clean_data = data.dropna()
یا بسته به مجموعه داده و معنای مقدار گمشده، ممکن است مقادیر گمشده را جایگزین کنید:
data["score"] = data["score"].fillna(data["score"].mean())
شما نباید بهطور خودکار هر مقدار گمشده را با میانگین جایگزین کنید. رویکرد مناسب به این بستگی دارد که دادههای گمشده نماینده چه چیزی هستند و قصد دارید چه چیزی را تحلیل کنید.
خروجی گرفتن از نتایج
پس از تحلیل یک مجموعه داده، ممکن است بخواهید نتایج خود را ذخیره کنید.
برای مثال:
average_by_grade.to_csv("average_scores_by_grade.csv")
همچنین میتوانید رکوردهای فیلترشده را ذخیره کنید:
high_scores.to_csv("high_scoring_students.csv", index=False)
آرگومان index=False مانع از آن میشود که پانداس ایندکس دیتافریم را به عنوان یک ستون اضافی اضافه کند.
اشتباهات رایجی که باید از آنها اجتناب کنید
فراموش کردن وارد کردن کتابخانهها (Import)
مطمئن شوید که کتابخانههای مورد نیاز ایمپورت شدهاند:
import pandas as pd
import matplotlib.pyplot as plt
در غیر این صورت، پایتون نمیداند pd یا plt به چه معنا هستند.
استفاده از نام ستون اشتباه
نام ستونها باید با مجموعه داده شما مطابقت داشته باشد.
برای مثال، اگر نام ستون study_hours باشد، این کد کار نخواهد کرد:
data["study time"]
شما همیشه میتوانید نامهای واقعی ستونها را با این دستور بررسی کنید:
print(data.columns)
اشتباه گرفتن همبستگی (Correlation) با علیت (Causation)
همبستگی میتواند رابطه بین متغیرها را شناسایی کند، اما ثابت نمیکند که یک متغیر باعث ایجاد متغیر دیگر شده است.
این تمایز با کار کردن روی مجموعهدادههای بزرگتر و پیچیدهتر، اهمیت بیشتری پیدا میکند.
تحلیل کردن پیش از درک دادهها
وسوسهکننده است که بلافاصله شروع به محاسبه آمار کنید. اما ابتدا مجموعه داده را بررسی کنید.
دستورات اولیه مفید عبارتند از:
data.head()
data.shape
data.info()
data.describe()
data.isnull().sum()
درک ساختار و کیفیت دادهها به جلوگیری از نتیجهگیریهای نادرست کمک میکند.
از اینجا به کجا برویم
تحلیلگری که ساختهاید عمداً ساده طراحی شده است، اما همین روند کار را میتوان برای مجموعهدادههای بسیار بزرگتر نیز به کار گرفت.
شما میتوانید آن را برای موارد زیر توسعه دهید:
- تحلیل دادههای فروش
- ردیابی ترافیک وبسایت
- بررسی پاسخهای نظرسنجی
- تحلیل کمپینهای بازاریابی
- بررسی آمارهای ورزشی
- کاوش در مجموعهدادههای مالی
- ردیابی دادههای اپلیکیشن یا مشتریان
همچنین میتوانید ویژگیهای پیشرفتهتری مانند نمودارهای تعاملی، آرگومانهای خط فرمان، گزارشهای خودکار یا مدلهای یادگیری ماشین را اضافه کنید.
برای مثال، به جای قرار دادن نام فایل CSV به صورت ثابت در کد (سختکدگذاری)، میتوانید به کاربر اجازه دهید آن را وارد کند:
filename = input("Enter the CSV filename: ")
data = pd.read_csv(filename)
print(data.head())
اکنون همان برنامه میتواند فایلهای CSV مختلفی را تحلیل کند.
سخن پایانی
برای شروع کار با دادهها نیازی به الگوریتمهای پیچیده ندارید. با پایتون، پانداس (pandas) و یک مجموعه داده نسبتاً کوچک، هماکنون نیز میتوانید تحلیلهای معناداری انجام دهید.
در این آموزش، شما یاد گرفتید که چگونه:
- دادههای CSV را با pandas بارگذاری کنید
- یک DataFrame را بررسی کنید
- آمارها را محاسبه کنید
- سطرها را فیلتر کنید
- رکوردهای خاصی را پیدا کنید
- دادهها را گروهبندی کنید
- همبستگیها (همبستگیها) را محاسبه کنید
- تصویرسازیها را ایجاد کنید
- مقادیر گمشده را مدیریت کنید
- نتایج تحلیل را صادر کنید
- تحلیل را با توابع سازماندهی کنید
مهمترین گام بعدی تمرین کردن با مجموعهدادههای مختلف است. هنگامی که در بارگذاری، بررسی، پاکسازی و تحلیل دادهها با pandas احساس راحتی کردید، میتوانید ساخت پروژههای تحلیل داده بسیار پیشرفتهتری را آغاز کنید.
کدنویسی شاد و لذتبخشی داشته باشید!
نظر مهندس بهمن آبادی: قدرت اصلی پاندز در تحلیل اکتشافی، ترکیب روان فیلترینگ، تج تجمیع و مصورسازی دادهها بدون نیاز به ابزارهای پیچیده است. به عنوان یک مدرس، همیشه توصیه میکنم پیش از ورود به مدلهای یادگیری ماشین، همین پایههای آماری و دستکاری DataFrame را به تسلط کامل برسانید. فراموش نکنید که همبستگی آماری هرگز به معنای اثبات رابطه علت و معلولی نیست و کیفیت خروجی همیشه به درک اولیه شما از ساختار دادهها بستگی دارد.
منبع: https://www.freecodecamp.org/news/how-to-build-a-simple-data-analyzer-in-python-with-pandas/